<HTML> 
<HEAD> 
	<TITLE>3rd Party ROBOTC Drivers</TITLE> 
<link href="tabs.css" rel="stylesheet" type="text/css"/> 
<link href="doxygen.css" rel="stylesheet" type="text/css"/> 
</HEAD> 
 
<BODY bgcolor="#ffffff" link="#000000" vlink="#000000"> 
<table width="100%" bgcolor="navy" cellspacing=0 cellpadding=1 border=0> 
<tr><td><table width="100%" bgcolor="#EEEEDD" cellspacing=0 cellpadding=3 border=0> 
<tr> 
    <td width="33%" align="left"> <img src="images/LOGO_NXT.gif" width=266 height=44 border="0" alt="Mindstorms"></td> 
    <td><b><font size="+3" color="navy">3rd Party ROBOTC Drivers</font></b></td> 
    <td align="right"> <img src="images/logo.png" width=44 height=44 border="0" alt="RobotC"></td>     
</tr> 
  <tr bgcolor="#cccc99" align="right"> 
          <td colspan=3> <font face="arial" size="-1"> [<a href=main.html>Home</a>] [<a target=_top href="https://sourceforge.net/projects/rdpartyrobotcdr/">Download</a>] [<a target=_top href="http://apps.sourceforge.net/mantisbt/rdpartyrobotcdr/my_view_page.php">Submit a bug/suggestion</a>]  [<a target=_top href="http://www.robotc.net/forums/">ROBOTC Forums</a>] [<a target=_top href="http://botbench.com">Blog</a>] [<a target=_top href="http://sourceforge.net/donate/index.php?group_id=257238">Support this project</a>]</font> </td> 
</tr> 
</table></td></tr> 
</table> 
<!-- Generated by Doxygen 1.7.2 -->
<div class="header">
  <div class="headertitle">
<h1>holitdata-motormux.h</h1>  </div>
</div>
<div class="contents">
<a href="holitdata-motormux_8h.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*!@addtogroup other</span>
<a name="l00002"></a>00002 <span class="comment"> * @{</span>
<a name="l00003"></a>00003 <span class="comment"> * @defgroup holitdata HDS Motor MUX</span>
<a name="l00004"></a>00004 <span class="comment"> * Holit Data Systems Motor MUX</span>
<a name="l00005"></a>00005 <span class="comment"> * @{</span>
<a name="l00006"></a>00006 <span class="comment"> */</span>
<a name="l00007"></a>00007 
<a name="l00008"></a>00008 <span class="comment">/*</span>
<a name="l00009"></a>00009 <span class="comment"> * $Id: holitdata-motormux.h 133 2013-03-10 15:15:38Z xander $</span>
<a name="l00010"></a>00010 <span class="comment"> */</span>
<a name="l00011"></a>00011 
<a name="l00012"></a>00012 <span class="preprocessor">#ifndef __HDMMUX_H__</span>
<a name="l00013"></a>00013 <span class="preprocessor"></span><span class="preprocessor">#define __HDMMUX_H__</span>
<a name="l00014"></a>00014 <span class="preprocessor"></span><span class="comment">/** \file holitdata-motormux.h</span>
<a name="l00015"></a>00015 <span class="comment"> * \brief Holit Data Systems Motor MUX driver</span>
<a name="l00016"></a>00016 <span class="comment"> *</span>
<a name="l00017"></a>00017 <span class="comment"> * holitdata-motormux.h provides an API for the Holit Data Systems Motor MUX.</span>
<a name="l00018"></a>00018 <span class="comment"> *</span>
<a name="l00019"></a>00019 <span class="comment"> * Changelog:</span>
<a name="l00020"></a>00020 <span class="comment"> * - 0.1: Initial release</span>
<a name="l00021"></a>00021 <span class="comment"> * - 0.2: Replaced array structs with typedefs\n</span>
<a name="l00022"></a>00022 <span class="comment"> *        Uses new split off include file MMUX-common.h</span>
<a name="l00023"></a>00023 <span class="comment"> *</span>
<a name="l00024"></a>00024 <span class="comment"> * Credits:</span>
<a name="l00025"></a>00025 <span class="comment"> * - Big thanks to Holit Data Systems for providing me with the hardware necessary to write and test this.</span>
<a name="l00026"></a>00026 <span class="comment"> * - Thanks to Cheh from Holit Data Systems for the extensive testing and subsequent bug reports :)</span>
<a name="l00027"></a>00027 <span class="comment"> *</span>
<a name="l00028"></a>00028 <span class="comment"> * TODO:</span>
<a name="l00029"></a>00029 <span class="comment"> * - Add support for multiple MUXes per sensor port</span>
<a name="l00030"></a>00030 <span class="comment"> * - Ramping up and down of motors</span>
<a name="l00031"></a>00031 <span class="comment"> *</span>
<a name="l00032"></a>00032 <span class="comment"> * License: You may use this code as you wish, provided you give credit where its due.</span>
<a name="l00033"></a>00033 <span class="comment"> *</span>
<a name="l00034"></a>00034 <span class="comment"> * THIS CODE WILL ONLY WORK WITH ROBOTC VERSION 3.59 AND HIGHER. </span>
<a name="l00035"></a>00035 <span class="comment"></span>
<a name="l00036"></a>00036 <span class="comment"> * \author Xander Soldaat (xander_at_botbench.com)</span>
<a name="l00037"></a>00037 <span class="comment"> * \date 20 February 2011</span>
<a name="l00038"></a>00038 <span class="comment"> * \version 0.2</span>
<a name="l00039"></a>00039 <span class="comment"> * \example holitdata-motormux-test1.c</span>
<a name="l00040"></a>00040 <span class="comment"> * \example holitdata-motormux-test2.c</span>
<a name="l00041"></a>00041 <span class="comment"> */</span>
<a name="l00042"></a>00042 
<a name="l00043"></a>00043 <span class="preprocessor">#pragma systemFile</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span>
<a name="l00045"></a>00045 <span class="preprocessor">#ifndef __COMMON_H__</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="common_8h.html" title="Commonly used functions used by drivers.">common.h</a>&quot;</span>
<a name="l00047"></a>00047 <span class="preprocessor">#endif</span>
<a name="l00048"></a>00048 <span class="preprocessor"></span>
<a name="l00049"></a>00049 <span class="preprocessor">#ifndef __MMUX_H__</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span><span class="preprocessor">#include &quot;<a class="code" href="common-mmux_8h.html" title="Commonly used types and defines used by Motor MUX drivers.">common-MMUX.h</a>&quot;</span>
<a name="l00051"></a>00051 <span class="preprocessor">#endif</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span>
<a name="l00053"></a>00053 <span class="comment">// device address - byte 0</span>
<a name="l00054"></a><a class="code" href="group__holitdata.html#ga1d4967a1dc141fa7c78fce37bdc9ee37">00054</a> <span class="preprocessor">#define HDMMUX_I2C_ADDR         0x02  </span><span class="comment">/*!&lt; HDMMUX I2C device address */</span>
<a name="l00055"></a>00055 
<a name="l00056"></a>00056 <span class="comment">// Command type - byte 1</span>
<a name="l00057"></a><a class="code" href="group__holitdata.html#gabb77ec3e99c4cad617cc1ede72606c3b">00057</a> <span class="preprocessor">#define HDMMUX_CMD_MOTOR        0x01</span>
<a name="l00058"></a><a class="code" href="group__holitdata.html#ga8e99d91f599743f5f4c5666363d946b9">00058</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_CMD_ADDRCHNG     0x02</span>
<a name="l00059"></a><a class="code" href="group__holitdata.html#ga9a17309959ed01c7af50242ac92c4834">00059</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_CMD_RST_TACH_A   0x03</span>
<a name="l00060"></a><a class="code" href="group__holitdata.html#ga7694f35d70f794746f420449222dda13">00060</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_CMD_RST_TACH_B   0x04</span>
<a name="l00061"></a><a class="code" href="group__holitdata.html#gaf985f76ca86f04bb92d68f327607a760">00061</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_CMD_RST_TACH_C   0x05</span>
<a name="l00062"></a>00062 <span class="preprocessor"></span>
<a name="l00063"></a>00063 <span class="comment">// motor indicator - byte 2</span>
<a name="l00064"></a><a class="code" href="group__holitdata.html#ga152bc60e5dd65d889b5564b33b0c6278">00064</a> <span class="preprocessor">#define HDMMUX_MOTOR_A          0x01</span>
<a name="l00065"></a><a class="code" href="group__holitdata.html#ga5aed7616cabe6a49f4c82107d8ab7ea3">00065</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_MOTOR_B          0x02</span>
<a name="l00066"></a><a class="code" href="group__holitdata.html#ga921659e14e3c5a464681ef15bc74ac33">00066</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_MOTOR_C          0x03</span>
<a name="l00067"></a>00067 <span class="preprocessor"></span>
<a name="l00068"></a><a class="code" href="group__holitdata.html#gae744ba909813538c7989e09713bd6e9e">00068</a> <span class="preprocessor">#define HDMMUX_MOTOR_OTHER      0x04</span>
<a name="l00069"></a><a class="code" href="group__holitdata.html#gaba830d33f1e2e13bb6e02e4c9f997cb1">00069</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_MOTOR_RIGHT      0x02</span>
<a name="l00070"></a><a class="code" href="group__holitdata.html#gaa785cf23c29f1cde670339cff405c89c">00070</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_MOTOR_LEFT       0x00</span>
<a name="l00071"></a>00071 <span class="preprocessor"></span>
<a name="l00072"></a>00072 <span class="comment">// rotation parameters - byte 3</span>
<a name="l00073"></a><a class="code" href="group__holitdata.html#ga8b5c1f641e616e32ca81f86376d78f8e">00073</a> <span class="preprocessor">#define HDMMUX_ROT_FORWARD      (0x01 &lt;&lt; 6)</span>
<a name="l00074"></a><a class="code" href="group__holitdata.html#ga4f09a764ccdceae83b4269941e60dc3d">00074</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_REVERSE      (0x02 &lt;&lt; 6)</span>
<a name="l00075"></a><a class="code" href="group__holitdata.html#gac2a359c98e7ca505517479e4b6c203d9">00075</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_STOP         (0x03 &lt;&lt; 6)</span>
<a name="l00076"></a>00076 <span class="preprocessor"></span>
<a name="l00077"></a><a class="code" href="group__holitdata.html#ga69f30e70456781d8f73737c265a7b715">00077</a> <span class="preprocessor">#define HDMMUX_ROT_CONSTSPEED   (0x01 &lt;&lt; 4)</span>
<a name="l00078"></a><a class="code" href="group__holitdata.html#gad7cad3b457f30cc41b26baa22fcb1a48">00078</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_RAMPUP       (0x02 &lt;&lt; 4)</span>
<a name="l00079"></a><a class="code" href="group__holitdata.html#ga9f9ea0c3182e48853500d9e0beeec80d">00079</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_RAMPDOWN     (0x03 &lt;&lt; 4)</span>
<a name="l00080"></a>00080 <span class="preprocessor"></span>
<a name="l00081"></a><a class="code" href="group__holitdata.html#ga58db191452bcfe01d6f799901eebbb6b">00081</a> <span class="preprocessor">#define HDMMUX_ROT_UNLIMITED    (0x00 &lt;&lt; 2)</span>
<a name="l00082"></a><a class="code" href="group__holitdata.html#gaddab324a4bb63f681c7ee96afb21614e">00082</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_DEGREES      (0x01 &lt;&lt; 2)</span>
<a name="l00083"></a><a class="code" href="group__holitdata.html#ga2134053b53a01ff59be26e713b1c4de1">00083</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_ROTATIONS    (0x02 &lt;&lt; 2)</span>
<a name="l00084"></a><a class="code" href="group__holitdata.html#gad7969b064d524a58417f7dfca4b40fe2">00084</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_SECONDS      (0x03 &lt;&lt; 2)</span>
<a name="l00085"></a>00085 <span class="preprocessor"></span>
<a name="l00086"></a><a class="code" href="group__holitdata.html#ga90a93643e9455bd364f447e84a37778f">00086</a> <span class="preprocessor">#define HDMMUX_ROT_POWERCONTROL (0x01 &lt;&lt; 1)</span>
<a name="l00087"></a>00087 <span class="preprocessor"></span>
<a name="l00088"></a><a class="code" href="group__holitdata.html#ga589429a31051aad29af4ce91de5e0bca">00088</a> <span class="preprocessor">#define HDMMUX_ROT_BRAKE        0x01</span>
<a name="l00089"></a><a class="code" href="group__holitdata.html#ga64c0b177003798c3abc2dc180cd12869">00089</a> <span class="preprocessor"></span><span class="preprocessor">#define HDMMUX_ROT_FLOAT        0x00</span>
<a name="l00090"></a>00090 <span class="preprocessor"></span>
<a name="l00091"></a><a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">00091</a> <a class="code" href="group__common.html#gaa172ef131853460e5b9f5c6db81d30f4">tByteArray</a> <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>;    <span class="comment">/*!&lt; Array to hold I2C command data */</span>
<a name="l00092"></a><a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">00092</a> <a class="code" href="group__common.html#gaa172ef131853460e5b9f5c6db81d30f4">tByteArray</a> <a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>;      <span class="comment">/*!&lt; Array to hold I2C reply data */</span>
<a name="l00093"></a>00093 
<a name="l00094"></a>00094 <span class="comment">// Function prototypes</span>
<a name="l00095"></a>00095 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga535f096dd8eef8d1c86cd818eb165c92">HDMMUXinit</a>();
<a name="l00096"></a>00096 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#gaf4c7a5f3640743090b2d360e7333ea2f">HDMMUXreadStatus</a>(tSensors link, ubyte &amp;motorStatus, <span class="keywordtype">long</span> &amp;tachoA, <span class="keywordtype">long</span> &amp;tachoB, <span class="keywordtype">long</span> &amp;tachoC);
<a name="l00097"></a>00097 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>(tSensors link, ubyte mode, ubyte channel, ubyte rotparams, <span class="keywordtype">long</span> duration, byte power, byte steering);
<a name="l00098"></a>00098 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga494763eb03935fb7266a4b73e4670178">HDMMotor</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, byte power);
<a name="l00099"></a>00099 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga45626902cadcdee073783a5973021192">HDMotorStop</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor);
<a name="l00100"></a>00100 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga45626902cadcdee073783a5973021192">HDMotorStop</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">bool</span> brake);
<a name="l00101"></a>00101 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga23bc66bcc708a0242b9fd9ce14a74b7a">HDMMotorSetRotationTarget</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">float</span> rottarget);
<a name="l00102"></a>00102 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga9001ade37d758427c5b6ee16fe8c2310">HDMMotorSetTimeTarget</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">float</span> timetarget);
<a name="l00103"></a>00103 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#gacb9ca2a2a00494399d5a49b0e768a452">HDMMotorSetEncoderTarget</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">long</span> enctarget);
<a name="l00104"></a>00104 <span class="keywordtype">long</span> <a class="code" href="group__holitdata.html#ga34aab3c9e76f83afb10fe3bda30bd4a8">HDMMotorEncoder</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor);
<a name="l00105"></a>00105 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga741e301ad1f831e39d9c14379115b4db">HDMMotorEncoderReset</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor);
<a name="l00106"></a>00106 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga7879fffe542c0918c97d5b5cfb277c4e">HDMMotorEncoderResetAll</a>(tSensors link);
<a name="l00107"></a>00107 <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga633cd6ad7e5682af6e0a3bfd9b793442">HDMMotorBusy</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor);
<a name="l00108"></a>00108 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga8bd10328a9988cae8a9b58956664804b">HDMMotorSetBrake</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor);
<a name="l00109"></a>00109 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga9082ae983475e561df02ed09d4dfbe3a">HDMMotorSetFloat</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor);
<a name="l00110"></a>00110 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga6c2ffd3d9050a7fdaa89fbdda23a5b3d">HDMMotorSetSpeedCtrl</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">bool</span> constspeed);
<a name="l00111"></a>00111 <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga947aaf8a97d56a6ebdb886bead2efca0">HDMMotorSetRamping</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, ubyte ramping);
<a name="l00112"></a>00112 
<a name="l00113"></a>00113 <span class="comment">/*</span>
<a name="l00114"></a>00114 <span class="comment"> * Initialise the mmuxData array needed for keeping track of motor settings</span>
<a name="l00115"></a>00115 <span class="comment"> */</span>
<a name="l00116"></a><a class="code" href="group__holitdata.html#ga535f096dd8eef8d1c86cd818eb165c92">00116</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga535f096dd8eef8d1c86cd818eb165c92">HDMMUXinit</a>(){
<a name="l00117"></a>00117   <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i = 0; i &lt; 4; i++) {
<a name="l00118"></a>00118     memset(<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[i].runToTarget[0], <span class="keyword">false</span>, 4);
<a name="l00119"></a>00119     memset(<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[i].brake[0], <span class="keyword">true</span>, 4);
<a name="l00120"></a>00120     memset(<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[i].pidcontrol[0], <span class="keyword">true</span>, 4);
<a name="l00121"></a>00121     memset(<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[i].<a class="code" href="group__htmc.html#ga39e0493ce40209f8833cc55adbeed48e">target</a>[0], 0, 4*4);
<a name="l00122"></a>00122     memset(<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[i].ramping[0], <a class="code" href="group__holitdata.html#ga69f30e70456781d8f73737c265a7b715">HDMMUX_ROT_CONSTSPEED</a>, 4);
<a name="l00123"></a>00123     memset(<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[i].targetUnit[0], <a class="code" href="group__holitdata.html#ga58db191452bcfe01d6f799901eebbb6b">HDMMUX_ROT_UNLIMITED</a>, 4);
<a name="l00124"></a>00124     <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[i].<a class="code" href="structmmux_data_t.html#ad86e7ae1ce88f3a7655a02558318afc3">initialised</a> = <span class="keyword">true</span>;
<a name="l00125"></a>00125   }
<a name="l00126"></a>00126 }
<a name="l00127"></a>00127 
<a name="l00128"></a>00128 <span class="comment"></span>
<a name="l00129"></a>00129 <span class="comment">/**</span>
<a name="l00130"></a>00130 <span class="comment"> * Read the status of the motors and tacho counts of the MMUX</span>
<a name="l00131"></a>00131 <span class="comment"> *</span>
<a name="l00132"></a>00132 <span class="comment"> * motorStatus is made of 3 bits, 1: motor is running, 0: motor is idle\n</span>
<a name="l00133"></a>00133 <span class="comment"> * bit 0: motor A\n</span>
<a name="l00134"></a>00134 <span class="comment"> * bit 1: motor B\n</span>
<a name="l00135"></a>00135 <span class="comment"> * bit 2: motor C\n</span>
<a name="l00136"></a>00136 <span class="comment"> *</span>
<a name="l00137"></a>00137 <span class="comment"> * @param link the MMUX port number</span>
<a name="l00138"></a>00138 <span class="comment"> * @param motorStatus status of the motors</span>
<a name="l00139"></a>00139 <span class="comment"> * @param tachoA Tacho count for motor A</span>
<a name="l00140"></a>00140 <span class="comment"> * @param tachoB Tacho count for motor B</span>
<a name="l00141"></a>00141 <span class="comment"> * @param tachoC Tacho count for motor C</span>
<a name="l00142"></a>00142 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00143"></a>00143 <span class="comment"> */</span>
<a name="l00144"></a><a class="code" href="group__holitdata.html#gaf4c7a5f3640743090b2d360e7333ea2f">00144</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#gaf4c7a5f3640743090b2d360e7333ea2f">HDMMUXreadStatus</a>(tSensors link, ubyte &amp;motorStatus, <span class="keywordtype">long</span> &amp;tachoA, <span class="keywordtype">long</span> &amp;tachoB, <span class="keywordtype">long</span> &amp;tachoC) {
<a name="l00145"></a>00145   memset(<a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="group__common.html#gaa172ef131853460e5b9f5c6db81d30f4">tByteArray</a>));
<a name="l00146"></a>00146 
<a name="l00147"></a>00147   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[0]  = 10;               <span class="comment">// Message size</span>
<a name="l00148"></a>00148   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[1]  = <a class="code" href="group__holitdata.html#ga1d4967a1dc141fa7c78fce37bdc9ee37">HDMMUX_I2C_ADDR</a>; <span class="comment">// I2C Address</span>
<a name="l00149"></a>00149 
<a name="l00150"></a>00150   <span class="keywordflow">if</span> (!<a class="code" href="group__common.html#gad02e06f83b264ee6fc7df41eb4712080">writeI2C</a>(link, <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>, <a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>, 13))
<a name="l00151"></a>00151     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00152"></a>00152 
<a name="l00153"></a>00153   motorStatus = <a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[0];
<a name="l00154"></a>00154 
<a name="l00155"></a>00155   <span class="comment">// Assemble and assign the encoder values</span>
<a name="l00156"></a>00156   tachoA = (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[1] &lt;&lt; 24) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[2] &lt;&lt; 16) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[3] &lt;&lt; 8) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[4] &lt;&lt; 0);
<a name="l00157"></a>00157   tachoB = (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[5] &lt;&lt; 24) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[6] &lt;&lt; 16) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[7] &lt;&lt; 8) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[8] &lt;&lt; 0);
<a name="l00158"></a>00158   tachoC = (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[9] &lt;&lt; 24) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[10] &lt;&lt; 16) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[11] &lt;&lt; 8) + (<a class="code" href="group__holitdata.html#ga82af72165d856c59557672bb7fa851d0">HDMMUX_I2CReply</a>[12] &lt;&lt; 0);
<a name="l00159"></a>00159 
<a name="l00160"></a>00160   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00161"></a>00161 }
<a name="l00162"></a>00162 
<a name="l00163"></a>00163 <span class="comment"></span>
<a name="l00164"></a>00164 <span class="comment">/**</span>
<a name="l00165"></a>00165 <span class="comment"> * Send a command to the MMUX.</span>
<a name="l00166"></a>00166 <span class="comment"> *</span>
<a name="l00167"></a>00167 <span class="comment"> * Note: this is an internal function and shouldn&#39;t be used directly</span>
<a name="l00168"></a>00168 <span class="comment"> * @param link the MMUX port number</span>
<a name="l00169"></a>00169 <span class="comment"> * @param mode the mode the MMX should operate in, controlling motors, resetting tachos or settings new address</span>
<a name="l00170"></a>00170 <span class="comment"> * @param channel the motors the command applies to</span>
<a name="l00171"></a>00171 <span class="comment"> * @param rotparams the additional parameters that make up the command</span>
<a name="l00172"></a>00172 <span class="comment"> * @param duration the number of units (can be seconds, rotations or degrees) the command should be run for</span>
<a name="l00173"></a>00173 <span class="comment"> * @param power the amount of power to be applied to the motor(s)</span>
<a name="l00174"></a>00174 <span class="comment"> * @param steering used for syncronised movement to control the amount of steering</span>
<a name="l00175"></a>00175 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00176"></a>00176 <span class="comment"> */</span>
<a name="l00177"></a><a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">00177</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>(tSensors link, ubyte mode, ubyte channel, ubyte rotparams, <span class="keywordtype">long</span> duration, byte power, byte steering) {
<a name="l00178"></a>00178   memset(<a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>, 0, <span class="keyword">sizeof</span>(<a class="code" href="group__common.html#gaa172ef131853460e5b9f5c6db81d30f4">tByteArray</a>));
<a name="l00179"></a>00179 
<a name="l00180"></a>00180   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[0]  = 10;               <span class="comment">// Message size</span>
<a name="l00181"></a>00181   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[1]  = <a class="code" href="group__holitdata.html#ga1d4967a1dc141fa7c78fce37bdc9ee37">HDMMUX_I2C_ADDR</a>; <span class="comment">// I2C Address</span>
<a name="l00182"></a>00182   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[2]  = mode;
<a name="l00183"></a>00183   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[3]  = channel;
<a name="l00184"></a>00184   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[4]  = rotparams;
<a name="l00185"></a>00185   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[5]  = (duration &gt;&gt; 24) &amp; 0xFF;
<a name="l00186"></a>00186   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[6]  = (duration &gt;&gt; 16) &amp; 0xFF;
<a name="l00187"></a>00187   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[7]  = (duration &gt;&gt;  8) &amp; 0xFF;
<a name="l00188"></a>00188   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[8]  = (duration &gt;&gt;  0) &amp; 0xFF;
<a name="l00189"></a>00189   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[9]  = power;
<a name="l00190"></a>00190   <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>[10] = (byte)(steering &amp; 0xFF);
<a name="l00191"></a>00191 
<a name="l00192"></a>00192   <span class="keywordflow">return</span> <a class="code" href="group__common.html#gad02e06f83b264ee6fc7df41eb4712080">writeI2C</a>(link, <a class="code" href="group__holitdata.html#ga19484ff15e883671827a693258717351">HDMMUX_I2CRequest</a>);
<a name="l00193"></a>00193 }
<a name="l00194"></a>00194 
<a name="l00195"></a>00195 <span class="comment"></span>
<a name="l00196"></a>00196 <span class="comment">/**</span>
<a name="l00197"></a>00197 <span class="comment"> * Run motor with specified speed.</span>
<a name="l00198"></a>00198 <span class="comment"> *</span>
<a name="l00199"></a>00199 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00200"></a>00200 <span class="comment"> * @param power power the amount of power to apply to the motor, value between -100 and +100</span>
<a name="l00201"></a>00201 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00202"></a>00202 <span class="comment"> */</span>
<a name="l00203"></a><a class="code" href="group__holitdata.html#ga494763eb03935fb7266a4b73e4670178">00203</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga494763eb03935fb7266a4b73e4670178">HDMMotor</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, byte power) {
<a name="l00204"></a>00204   ubyte command = 0;
<a name="l00205"></a>00205   <span class="keywordtype">bool</span> retval = <span class="keyword">true</span>;
<a name="l00206"></a>00206   <span class="keywordtype">long</span> <a class="code" href="group__htmc.html#ga39e0493ce40209f8833cc55adbeed48e">target</a> = <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a323674818d85ef4c3430253aa45a0d8e">target</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)];
<a name="l00207"></a>00207 
<a name="l00208"></a>00208   command |= (<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a9063971c953b64e1b32222b9ce5780f6">brake</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)]) ? <a class="code" href="group__holitdata.html#ga589429a31051aad29af4ce91de5e0bca">HDMMUX_ROT_BRAKE</a> : <a class="code" href="group__holitdata.html#ga64c0b177003798c3abc2dc180cd12869">HDMMUX_ROT_FLOAT</a>;
<a name="l00209"></a>00209   command |= <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#aaf32ec57dafc672cd270aeaceab02bdb">ramping</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)];
<a name="l00210"></a>00210   command |= (<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a201498569375a319530e44ca4bc069ff">pidcontrol</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)]) ? <a class="code" href="group__holitdata.html#ga90a93643e9455bd364f447e84a37778f">HDMMUX_ROT_POWERCONTROL</a> : 0;
<a name="l00211"></a>00211   command |= (power &gt; 0) ? <a class="code" href="group__holitdata.html#ga8b5c1f641e616e32ca81f86376d78f8e">HDMMUX_ROT_FORWARD</a> : <a class="code" href="group__holitdata.html#ga4f09a764ccdceae83b4269941e60dc3d">HDMMUX_ROT_REVERSE</a>;
<a name="l00212"></a>00212   command |= <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#af605cf5944be1527f218146e36f01c7b">targetUnit</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)];
<a name="l00213"></a>00213 
<a name="l00214"></a>00214   retval = <a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>((tSensors)<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor), <a class="code" href="group__holitdata.html#gabb77ec3e99c4cad617cc1ede72606c3b">HDMMUX_CMD_MOTOR</a>, (ubyte)<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor) + 1, command, target, abs(power), 0);
<a name="l00215"></a>00215 
<a name="l00216"></a>00216   <span class="comment">// Reset the data</span>
<a name="l00217"></a>00217   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#af605cf5944be1527f218146e36f01c7b">targetUnit</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <a class="code" href="group__holitdata.html#ga58db191452bcfe01d6f799901eebbb6b">HDMMUX_ROT_UNLIMITED</a>;
<a name="l00218"></a>00218   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a323674818d85ef4c3430253aa45a0d8e">target</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = 0;
<a name="l00219"></a>00219 
<a name="l00220"></a>00220   <span class="keywordflow">return</span> retval;
<a name="l00221"></a>00221 }
<a name="l00222"></a>00222 
<a name="l00223"></a>00223 <span class="comment"></span>
<a name="l00224"></a>00224 <span class="comment">/**</span>
<a name="l00225"></a>00225 <span class="comment"> * Stop the motor. Uses the brake method specified with HDMMotorSetBrake or HDMMotorSetFloat.</span>
<a name="l00226"></a>00226 <span class="comment"> * The default is to use braking.</span>
<a name="l00227"></a>00227 <span class="comment"> *</span>
<a name="l00228"></a>00228 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00229"></a>00229 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00230"></a>00230 <span class="comment"> */</span>
<a name="l00231"></a><a class="code" href="group__holitdata.html#ga45626902cadcdee073783a5973021192">00231</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga45626902cadcdee073783a5973021192">HDMotorStop</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor) {
<a name="l00232"></a>00232   ubyte command = 0;
<a name="l00233"></a>00233   <span class="keywordtype">bool</span> retval = <span class="keyword">true</span>;
<a name="l00234"></a>00234 
<a name="l00235"></a>00235   command |= (<a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a9063971c953b64e1b32222b9ce5780f6">brake</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)]) ? <a class="code" href="group__holitdata.html#ga589429a31051aad29af4ce91de5e0bca">HDMMUX_ROT_BRAKE</a> : <a class="code" href="group__holitdata.html#ga64c0b177003798c3abc2dc180cd12869">HDMMUX_ROT_FLOAT</a>;
<a name="l00236"></a>00236   command |= <a class="code" href="group__holitdata.html#gac2a359c98e7ca505517479e4b6c203d9">HDMMUX_ROT_STOP</a>;
<a name="l00237"></a>00237 
<a name="l00238"></a>00238   retval = <a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>((tSensors)<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor), <a class="code" href="group__holitdata.html#gabb77ec3e99c4cad617cc1ede72606c3b">HDMMUX_CMD_MOTOR</a>, (ubyte)<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor) + 1, command, 0, 0, 0);
<a name="l00239"></a>00239 
<a name="l00240"></a>00240   <span class="comment">// Reset the data</span>
<a name="l00241"></a>00241   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#af605cf5944be1527f218146e36f01c7b">targetUnit</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <a class="code" href="group__holitdata.html#ga58db191452bcfe01d6f799901eebbb6b">HDMMUX_ROT_UNLIMITED</a>;
<a name="l00242"></a>00242   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a323674818d85ef4c3430253aa45a0d8e">target</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = 0;
<a name="l00243"></a>00243 
<a name="l00244"></a>00244   <span class="keywordflow">return</span> retval;
<a name="l00245"></a>00245 }
<a name="l00246"></a>00246 
<a name="l00247"></a>00247 <span class="comment"></span>
<a name="l00248"></a>00248 <span class="comment">/**</span>
<a name="l00249"></a>00249 <span class="comment"> * Stop the motor. This function overrides the preconfigured braking method.</span>
<a name="l00250"></a>00250 <span class="comment"> *</span>
<a name="l00251"></a>00251 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00252"></a>00252 <span class="comment"> * @param brake when set to true: use brake, false: use float</span>
<a name="l00253"></a>00253 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00254"></a>00254 <span class="comment"> */</span>
<a name="l00255"></a><a class="code" href="group__holitdata.html#gafc336fc65157f3ad43c92311d8ff6ef2">00255</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga45626902cadcdee073783a5973021192">HDMotorStop</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">bool</span> brake) {
<a name="l00256"></a>00256   ubyte command = 0;
<a name="l00257"></a>00257   <span class="keywordtype">bool</span> retval = <span class="keyword">true</span>;
<a name="l00258"></a>00258 
<a name="l00259"></a>00259   command |= (brake) ? <a class="code" href="group__holitdata.html#ga589429a31051aad29af4ce91de5e0bca">HDMMUX_ROT_BRAKE</a> : <a class="code" href="group__holitdata.html#ga64c0b177003798c3abc2dc180cd12869">HDMMUX_ROT_FLOAT</a>;
<a name="l00260"></a>00260   command |= <a class="code" href="group__holitdata.html#gac2a359c98e7ca505517479e4b6c203d9">HDMMUX_ROT_STOP</a>;
<a name="l00261"></a>00261 
<a name="l00262"></a>00262   retval = <a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>((tSensors)<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor), <a class="code" href="group__holitdata.html#gabb77ec3e99c4cad617cc1ede72606c3b">HDMMUX_CMD_MOTOR</a>, (ubyte)<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor) + 1, command, 0, 0, 0);
<a name="l00263"></a>00263 
<a name="l00264"></a>00264   <span class="comment">// Reset the data</span>
<a name="l00265"></a>00265   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#af605cf5944be1527f218146e36f01c7b">targetUnit</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <a class="code" href="group__holitdata.html#ga58db191452bcfe01d6f799901eebbb6b">HDMMUX_ROT_UNLIMITED</a>;
<a name="l00266"></a>00266   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a323674818d85ef4c3430253aa45a0d8e">target</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = 0;
<a name="l00267"></a>00267 
<a name="l00268"></a>00268   <span class="keywordflow">return</span> retval;
<a name="l00269"></a>00269 }
<a name="l00270"></a>00270 
<a name="l00271"></a>00271 <span class="comment"></span>
<a name="l00272"></a>00272 <span class="comment">/**</span>
<a name="l00273"></a>00273 <span class="comment"> * Set rotation target for specified mux motor. Rotations can be specified in</span>
<a name="l00274"></a>00274 <span class="comment"> * increments of 0.01.  To rotate the motor 10.54 degrees, specify a value of 10.54.</span>
<a name="l00275"></a>00275 <span class="comment"> *</span>
<a name="l00276"></a>00276 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00277"></a>00277 <span class="comment"> * @param rottarget the rotation target value</span>
<a name="l00278"></a>00278 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00279"></a>00279 <span class="comment"> */</span>
<a name="l00280"></a><a class="code" href="group__holitdata.html#ga23bc66bcc708a0242b9fd9ce14a74b7a">00280</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga23bc66bcc708a0242b9fd9ce14a74b7a">HDMMotorSetRotationTarget</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">float</span> rottarget) {
<a name="l00281"></a>00281   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a323674818d85ef4c3430253aa45a0d8e">target</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = (long)(rottarget * 100);
<a name="l00282"></a>00282   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#af605cf5944be1527f218146e36f01c7b">targetUnit</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <a class="code" href="group__holitdata.html#ga2134053b53a01ff59be26e713b1c4de1">HDMMUX_ROT_ROTATIONS</a>;
<a name="l00283"></a>00283 }
<a name="l00284"></a>00284 
<a name="l00285"></a>00285 <span class="comment"></span>
<a name="l00286"></a>00286 <span class="comment">/**</span>
<a name="l00287"></a>00287 <span class="comment"> * Set time target for specified mux motor. Seconds can be specified in</span>
<a name="l00288"></a>00288 <span class="comment"> * increments of 0.01.  To rotate the motor for 10.21 seconds, specify a value of 10.21.</span>
<a name="l00289"></a>00289 <span class="comment"> *</span>
<a name="l00290"></a>00290 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00291"></a>00291 <span class="comment"> * @param timetarget the time target value in seconds.</span>
<a name="l00292"></a>00292 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00293"></a>00293 <span class="comment"> */</span>
<a name="l00294"></a><a class="code" href="group__holitdata.html#ga9001ade37d758427c5b6ee16fe8c2310">00294</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga9001ade37d758427c5b6ee16fe8c2310">HDMMotorSetTimeTarget</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">float</span> timetarget) {
<a name="l00295"></a>00295   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a323674818d85ef4c3430253aa45a0d8e">target</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = (long)(timetarget * 100);
<a name="l00296"></a>00296   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#af605cf5944be1527f218146e36f01c7b">targetUnit</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <a class="code" href="group__holitdata.html#gad7969b064d524a58417f7dfca4b40fe2">HDMMUX_ROT_SECONDS</a>;
<a name="l00297"></a>00297 }
<a name="l00298"></a>00298 
<a name="l00299"></a>00299 <span class="comment"></span>
<a name="l00300"></a>00300 <span class="comment">/**</span>
<a name="l00301"></a>00301 <span class="comment"> * Set encoder target for specified mux motor.</span>
<a name="l00302"></a>00302 <span class="comment"> *</span>
<a name="l00303"></a>00303 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00304"></a>00304 <span class="comment"> * @param enctarget the encoder target value in degrees.</span>
<a name="l00305"></a>00305 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00306"></a>00306 <span class="comment"> */</span>
<a name="l00307"></a><a class="code" href="group__holitdata.html#gacb9ca2a2a00494399d5a49b0e768a452">00307</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#gacb9ca2a2a00494399d5a49b0e768a452">HDMMotorSetEncoderTarget</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">long</span> enctarget) {
<a name="l00308"></a>00308   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a323674818d85ef4c3430253aa45a0d8e">target</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = enctarget;
<a name="l00309"></a>00309   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#af605cf5944be1527f218146e36f01c7b">targetUnit</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <a class="code" href="group__holitdata.html#gaddab324a4bb63f681c7ee96afb21614e">HDMMUX_ROT_DEGREES</a>;
<a name="l00310"></a>00310 }
<a name="l00311"></a>00311 
<a name="l00312"></a>00312 <span class="comment"></span>
<a name="l00313"></a>00313 <span class="comment">/**</span>
<a name="l00314"></a>00314 <span class="comment"> * Fetch the current encoder value for specified motor channel</span>
<a name="l00315"></a>00315 <span class="comment"> *</span>
<a name="l00316"></a>00316 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00317"></a>00317 <span class="comment"> * @return the current value of the encoder</span>
<a name="l00318"></a>00318 <span class="comment"> */</span>
<a name="l00319"></a><a class="code" href="group__holitdata.html#ga34aab3c9e76f83afb10fe3bda30bd4a8">00319</a> <span class="keywordtype">long</span> <a class="code" href="group__holitdata.html#ga34aab3c9e76f83afb10fe3bda30bd4a8">HDMMotorEncoder</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor) {
<a name="l00320"></a>00320   <span class="keywordtype">long</span> encA  = 0;
<a name="l00321"></a>00321   <span class="keywordtype">long</span> encB  = 0;
<a name="l00322"></a>00322   <span class="keywordtype">long</span> encC  = 0;
<a name="l00323"></a>00323   ubyte dummy = 0;
<a name="l00324"></a>00324 
<a name="l00325"></a>00325   <a class="code" href="group__holitdata.html#gaf4c7a5f3640743090b2d360e7333ea2f">HDMMUXreadStatus</a>((tSensors)<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor), dummy, encA, encB, encC);
<a name="l00326"></a>00326 
<a name="l00327"></a>00327   <span class="keywordflow">switch</span> ((ubyte)<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)) {
<a name="l00328"></a>00328     <span class="keywordflow">case</span> 0: <span class="keywordflow">return</span> encA;
<a name="l00329"></a>00329     <span class="keywordflow">case</span> 1: <span class="keywordflow">return</span> encB;
<a name="l00330"></a>00330     <span class="keywordflow">case</span> 2: <span class="keywordflow">return</span> encC;
<a name="l00331"></a>00331   }
<a name="l00332"></a>00332 
<a name="l00333"></a>00333   <span class="keywordflow">return</span> 0;
<a name="l00334"></a>00334 }
<a name="l00335"></a>00335 
<a name="l00336"></a>00336 <span class="comment"></span>
<a name="l00337"></a>00337 <span class="comment">/**</span>
<a name="l00338"></a>00338 <span class="comment"> * Reset target encoder for specified motor channel, use only at</span>
<a name="l00339"></a>00339 <span class="comment"> * the start of your program.  If you are using the standard NXT wheels</span>
<a name="l00340"></a>00340 <span class="comment"> * you will not run into problems with a wrap-around for the first 500kms</span>
<a name="l00341"></a>00341 <span class="comment"> * or so.</span>
<a name="l00342"></a>00342 <span class="comment"> *</span>
<a name="l00343"></a>00343 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00344"></a>00344 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00345"></a>00345 <span class="comment"> */</span>
<a name="l00346"></a><a class="code" href="group__holitdata.html#ga741e301ad1f831e39d9c14379115b4db">00346</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga741e301ad1f831e39d9c14379115b4db">HDMMotorEncoderReset</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor) {
<a name="l00347"></a>00347   ubyte mode = 0;
<a name="l00348"></a>00348 
<a name="l00349"></a>00349   <span class="keywordflow">switch</span> ((ubyte)<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)) {
<a name="l00350"></a>00350     <span class="keywordflow">case</span> 0: mode = <a class="code" href="group__holitdata.html#ga9a17309959ed01c7af50242ac92c4834">HDMMUX_CMD_RST_TACH_A</a>; <span class="keywordflow">break</span>;
<a name="l00351"></a>00351     <span class="keywordflow">case</span> 1: mode = <a class="code" href="group__holitdata.html#ga7694f35d70f794746f420449222dda13">HDMMUX_CMD_RST_TACH_B</a>; <span class="keywordflow">break</span>;
<a name="l00352"></a>00352     <span class="keywordflow">case</span> 2: mode = <a class="code" href="group__holitdata.html#gaf985f76ca86f04bb92d68f327607a760">HDMMUX_CMD_RST_TACH_C</a>; <span class="keywordflow">break</span>;
<a name="l00353"></a>00353   }
<a name="l00354"></a>00354 
<a name="l00355"></a>00355   <span class="keywordflow">return</span> <a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>((tSensors)<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor), mode, 0, 0, 0, 0, 0);
<a name="l00356"></a>00356 }
<a name="l00357"></a>00357 
<a name="l00358"></a>00358 <span class="comment"></span>
<a name="l00359"></a>00359 <span class="comment">/**</span>
<a name="l00360"></a>00360 <span class="comment"> * Reset all encoders on the specified motor-MUX. Use only at</span>
<a name="l00361"></a>00361 <span class="comment"> * the start of your program.  If you are using the standard NXT wheels</span>
<a name="l00362"></a>00362 <span class="comment"> * you will not run into problems with a wrap-around for the first 500kms</span>
<a name="l00363"></a>00363 <span class="comment"> * or so.</span>
<a name="l00364"></a>00364 <span class="comment"> *</span>
<a name="l00365"></a>00365 <span class="comment"> * @param link the MMUX port number</span>
<a name="l00366"></a>00366 <span class="comment"> * @return true if no error occured, false if it did</span>
<a name="l00367"></a>00367 <span class="comment"> */</span>
<a name="l00368"></a><a class="code" href="group__holitdata.html#ga7879fffe542c0918c97d5b5cfb277c4e">00368</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga7879fffe542c0918c97d5b5cfb277c4e">HDMMotorEncoderResetAll</a>(tSensors link) {
<a name="l00369"></a>00369   <span class="keywordflow">if</span> (!<a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>(link, <a class="code" href="group__holitdata.html#ga9a17309959ed01c7af50242ac92c4834">HDMMUX_CMD_RST_TACH_A</a>, 0, 0, 0, 0, 0))
<a name="l00370"></a>00370     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00371"></a>00371 
<a name="l00372"></a>00372   <span class="keywordflow">if</span> (!<a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>(link, <a class="code" href="group__holitdata.html#ga7694f35d70f794746f420449222dda13">HDMMUX_CMD_RST_TACH_B</a>, 0, 0, 0, 0, 0))
<a name="l00373"></a>00373     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00374"></a>00374 
<a name="l00375"></a>00375   <span class="keywordflow">if</span> (!<a class="code" href="group__holitdata.html#gad0558a4dd874dfda556cbe2cf2b81372">HDMMUXsendCommand</a>(link, <a class="code" href="group__holitdata.html#gaf985f76ca86f04bb92d68f327607a760">HDMMUX_CMD_RST_TACH_C</a>, 0, 0, 0, 0, 0))
<a name="l00376"></a>00376     <span class="keywordflow">return</span> <span class="keyword">false</span>;
<a name="l00377"></a>00377 
<a name="l00378"></a>00378   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00379"></a>00379 }
<a name="l00380"></a>00380 
<a name="l00381"></a>00381 <span class="comment"></span>
<a name="l00382"></a>00382 <span class="comment">/**</span>
<a name="l00383"></a>00383 <span class="comment"> * Check if the specified motor is running or not.</span>
<a name="l00384"></a>00384 <span class="comment"> *</span>
<a name="l00385"></a>00385 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00386"></a>00386 <span class="comment"> * @return true if the motor is still running, false if it&#39;s idle</span>
<a name="l00387"></a>00387 <span class="comment"> */</span>
<a name="l00388"></a><a class="code" href="group__holitdata.html#ga633cd6ad7e5682af6e0a3bfd9b793442">00388</a> <span class="keywordtype">bool</span> <a class="code" href="group__holitdata.html#ga633cd6ad7e5682af6e0a3bfd9b793442">HDMMotorBusy</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor) {
<a name="l00389"></a>00389   <span class="keywordtype">long</span> dummy  = 0;
<a name="l00390"></a>00390   ubyte motorStatus = 0;
<a name="l00391"></a>00391 
<a name="l00392"></a>00392   <a class="code" href="group__holitdata.html#gaf4c7a5f3640743090b2d360e7333ea2f">HDMMUXreadStatus</a>((tSensors)<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor), motorStatus, dummy, dummy, dummy);
<a name="l00393"></a>00393 
<a name="l00394"></a>00394   <span class="keywordflow">switch</span> ((ubyte)<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)) {
<a name="l00395"></a>00395     <span class="keywordflow">case</span> 0: <span class="keywordflow">return</span> ((motorStatus &amp; 0x01) == 0x01);
<a name="l00396"></a>00396     <span class="keywordflow">case</span> 1: <span class="keywordflow">return</span> ((motorStatus &amp; 0x02) == 0x02);
<a name="l00397"></a>00397     <span class="keywordflow">case</span> 2: <span class="keywordflow">return</span> ((motorStatus &amp; 0x04) == 0x04);
<a name="l00398"></a>00398   }
<a name="l00399"></a>00399 
<a name="l00400"></a>00400   <span class="keywordflow">return</span> <span class="keyword">true</span>;
<a name="l00401"></a>00401 }
<a name="l00402"></a>00402 
<a name="l00403"></a>00403 <span class="comment"></span>
<a name="l00404"></a>00404 <span class="comment">/**</span>
<a name="l00405"></a>00405 <span class="comment"> * Set the stopping method for the specified motor to brake.</span>
<a name="l00406"></a>00406 <span class="comment"> *</span>
<a name="l00407"></a>00407 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00408"></a>00408 <span class="comment"> */</span>
<a name="l00409"></a><a class="code" href="group__holitdata.html#ga8bd10328a9988cae8a9b58956664804b">00409</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga8bd10328a9988cae8a9b58956664804b">HDMMotorSetBrake</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor) {
<a name="l00410"></a>00410   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a9063971c953b64e1b32222b9ce5780f6">brake</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <span class="keyword">true</span>;
<a name="l00411"></a>00411 }
<a name="l00412"></a>00412 
<a name="l00413"></a>00413 <span class="comment"></span>
<a name="l00414"></a>00414 <span class="comment">/**</span>
<a name="l00415"></a>00415 <span class="comment"> * Set the stopping method for the specified motor to float.</span>
<a name="l00416"></a>00416 <span class="comment"> *</span>
<a name="l00417"></a>00417 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00418"></a>00418 <span class="comment"> */</span>
<a name="l00419"></a><a class="code" href="group__holitdata.html#ga9082ae983475e561df02ed09d4dfbe3a">00419</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga9082ae983475e561df02ed09d4dfbe3a">HDMMotorSetFloat</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor) {
<a name="l00420"></a>00420   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a9063971c953b64e1b32222b9ce5780f6">brake</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <span class="keyword">false</span>;
<a name="l00421"></a>00421 }
<a name="l00422"></a>00422 
<a name="l00423"></a>00423 <span class="comment"></span>
<a name="l00424"></a>00424 <span class="comment">/**</span>
<a name="l00425"></a>00425 <span class="comment"> * Set the motor speed control for the specified motor.</span>
<a name="l00426"></a>00426 <span class="comment"> *</span>
<a name="l00427"></a>00427 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00428"></a>00428 <span class="comment"> * @param constspeed whether or not to use speed control</span>
<a name="l00429"></a>00429 <span class="comment"> */</span>
<a name="l00430"></a><a class="code" href="group__holitdata.html#ga6c2ffd3d9050a7fdaa89fbdda23a5b3d">00430</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga6c2ffd3d9050a7fdaa89fbdda23a5b3d">HDMMotorSetSpeedCtrl</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, <span class="keywordtype">bool</span> constspeed) {
<a name="l00431"></a>00431   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#a201498569375a319530e44ca4bc069ff">pidcontrol</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = <span class="keyword">true</span>;
<a name="l00432"></a>00432 }
<a name="l00433"></a>00433 
<a name="l00434"></a>00434 <span class="comment"></span>
<a name="l00435"></a>00435 <span class="comment">/**</span>
<a name="l00436"></a>00436 <span class="comment"> * Set the motor ramping type the specified motor.</span>
<a name="l00437"></a>00437 <span class="comment"> * ramping can be one of\n</span>
<a name="l00438"></a>00438 <span class="comment"> * - HDMMUX_ROT_CONSTSPEED</span>
<a name="l00439"></a>00439 <span class="comment"> * - HDMMUX_ROT_RAMPUP</span>
<a name="l00440"></a>00440 <span class="comment"> * - HDMMUX_ROT_RAMPDOWN</span>
<a name="l00441"></a>00441 <span class="comment"> *</span>
<a name="l00442"></a>00442 <span class="comment"> * @param muxmotor the motor-MUX motor</span>
<a name="l00443"></a>00443 <span class="comment"> * @param ramping the type of ramping to be used</span>
<a name="l00444"></a>00444 <span class="comment"> */</span>
<a name="l00445"></a><a class="code" href="group__holitdata.html#ga947aaf8a97d56a6ebdb886bead2efca0">00445</a> <span class="keywordtype">void</span> <a class="code" href="group__holitdata.html#ga947aaf8a97d56a6ebdb886bead2efca0">HDMMotorSetRamping</a>(<a class="code" href="group___m_m_u_x-common__h.html#ga11217de3dd0a7e4159c3578c1cdbba12">tMUXmotor</a> muxmotor, ubyte ramping) {
<a name="l00446"></a>00446   <a class="code" href="group___m_m_u_x-common__h.html#ga048db86417be3a81da734debe91a52db">mmuxData</a>[<a class="code" href="group___m_m_u_x-common__h.html#gabf500b8c69e75f9fad47c3a3e25626c7">SPORT</a>(muxmotor)].<a class="code" href="structmmux_data_t.html#aaf32ec57dafc672cd270aeaceab02bdb">ramping</a>[<a class="code" href="group___m_m_u_x-common__h.html#ga9b28381cff35f11a5fd1aff7576117bc">MPORT</a>(muxmotor)] = ramping;
<a name="l00447"></a>00447 }
<a name="l00448"></a>00448 
<a name="l00449"></a>00449 <span class="preprocessor">#endif //  __HDMMUX_H__</span>
<a name="l00450"></a>00450 <span class="preprocessor"></span>
<a name="l00451"></a>00451 <span class="comment">/*</span>
<a name="l00452"></a>00452 <span class="comment"> * $Id: holitdata-motormux.h 133 2013-03-10 15:15:38Z xander $</span>
<a name="l00453"></a>00453 <span class="comment"> */</span>
<a name="l00454"></a>00454 <span class="comment">/* @} */</span>
<a name="l00455"></a>00455 <span class="comment">/* @} */</span>
</pre></div></div>
</div>
<hr class="footer"/><address class="footer"><small>Generated on Wed Mar 13 2013 19:56:43 for ROBOTC Drivers by&#160;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.7.2 </small></address>
</body>
</html>
